<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    let data = {
      name: '尚硅谷',
      address: '北京'
    }

    //创建一个监视的实例对象，用于监视data中属性的变化
    const obs = new Observer(data)

    function Observer(obj) {
      console.log(this)
      //汇总对象中所有的属性形成一个数组
      const keys = Object.keys(obj)
      //遍历
      keys.forEach((k) => {
        Object.defineProperty(this, k, {
          get() {
            return obj[k]
          },
          set(val) {
            obj[k] = val
          }
        })
      })
    }
  </script>
</body>

</html>